package com.example.mq_sm.common;

import java.io.*;

// 不仅仅是 message, 其他的 Java 中的对象, 也是可以通过这样的逻辑进行序列化和反序列化的
// 如果要想让这个对象能够序列化和反序列化，需要让这个类能够实现 serializable 接口
public class BinaryTool {
    // 把一个对象序列化成一个字节数组
    public static byte[] toBytes(Object object) throws IOException {
        // 这个流对象相当于一个变长的字节数组
        // 吧 object 序列化的数据给逐渐地写入到 byteArrayOutputStream 中， 在统一转成byte[]
        try(ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()){
            try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream)){
                objectOutputStream.writeObject(object);
            }
            return byteArrayOutputStream.toByteArray();
        }
    }

    // 把一个字节数组，反序列化成一个对象
    //反序列化
    public  static Object fromBytes(byte[] data) throws IOException, ClassNotFoundException {
        Object object=null;
        try(ByteArrayInputStream  byteArrayInputStream=new ByteArrayInputStream(data)){
            try(ObjectInputStream  objectInputStream=new ObjectInputStream(byteArrayInputStream)){
                //此处的readObject，就是从data这个byte[]中读取数据并进行反序列化
                object= objectInputStream.readObject();
            }
        }
        return  object;
    }
}
